package br.leiam.eolica.sistema;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;

import sun.misc.BASE64Decoder;
import br.leiam.eolica.excecoes.EolicaException;
import br.leiam.eolica.facade.FacadeEolica;
import br.leiam.eolica.util.Logger;

public class Controller {
	
	private static long extracted(int x) {
		long out = System.currentTimeMillis();
		for(int i = 0; i < x ; i++) {			
			out -=  1000000000;
		}
		return out;
	}

	/**
	 * @param args
	 * @throws EolicaException 
	 */
	public static void main(String[] args)  {

		FacadeEolica facade = FacadeEolica.getInstance();
		//System.out.println(facade.getUsuario("arthur", "1234"));	
		String dataInicial = "2011-03-01 00:00:00";
		String dataFinal = "2011-03-07 23:50:00";
		
		
		/* long extracted = extracted(15);
		Date date = new Date(extracted);
		 
		System.out.println(extracted);  
		 System.out.println(date);  
		
		 System.exit(0);*/
		
		String estacao = "tac4";
		int altura = 100;
		String[] figuras;
		
		
		try {
//			Decodificar(facade.gerarGraficoVelocidade(estacao, altura,dataInicial, dataFinal),"GraficoVelocidade");
			//Decodificar(facade.gerarWeibull(estacao, altura, dataInicial, dataFinal),"Weibull");
//			Decodificar(facade.gerarGraficoRosaDosVentosFrequencia(estacao, altura, dataInicial, dataFinal),"RosaDosVentosFrequencia");
	//		Decodificar(facade.gerarGraficoRosaDosVentosVelocidades(estacao, altura, dataInicial, dataFinal),"RosaDosVentosVelocidades");
//			Decodificar(facade.gerarGraficoFrequenciaDeDistribuicao(estacao, altura, dataInicial, dataFinal),"FrequenciaDeDistribuicao");
//			Decodificar(facade.gerarGraficoCurvaPotenciaAerogerador(estacao, altura, dataInicial, dataFinal),"PotenciaAerogerador");
			Decodificar(facade.gerarTabela(estacao, altura, "turbina" ,dataInicial, dataFinal),"ProdEnergia");
			
			
			//OLD
			//figuras = facade.gerarGraficoRosaDosVentosEWeibull(estacao, altura, dataInicial, dataFinal);
			//figuras = facade.gerarGraficoFreqAeroProdEnergia(estacao, altura, dataInicial, dataFinal);
			//figuras = facade.gerarAerogerador(estacao);
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	

	private static void Decodificar(String[] figuras, String nomeGrafico) throws IOException,
			FileNotFoundException {
		//figuras = facade.gerarGraficoVelocidade(estacao, altura,dataInicial, dataFinal);
		//figuras = facade.gerarWeibull(estacao, altura, dataInicial, dataFinal);
		//figuras = facade.gerarGraficoRosaDosVentosFrequencia(estacao, altura, dataInicial, dataFinal);
		//figuras = facade.gerarGraficoRosaDosVentosVelocidades(estacao, altura, dataInicial, dataFinal);
		//figuras = facade.gerarGraficoFrequenciaDeDistribuicao(estacao, altura, dataInicial, dataFinal);
		//figuras = facade.gerarGraficoCurvaPotenciaAerogerador(estacao, altura, dataInicial, dataFinal);
		//figuras = facade.gerarTabela(estacao, altura, dataInicial, dataFinal);		
		for (int i = 0; i < figuras.length; i++) {
			BASE64Decoder decoder = new BASE64Decoder();
			byte[] figurasDecodificadas = null;
			try {
				figurasDecodificadas = decoder.decodeBuffer(figuras[i]);
				String nomeArquivo = "./figuras/Grafico_"+ nomeGrafico + String.valueOf(figuras.length)
				+ String.valueOf(i) + ".png";
				FileOutputStream outputFile = new FileOutputStream(nomeArquivo);		
				
				outputFile.write(figurasDecodificadas);
				outputFile.flush();
				outputFile.close();
				Logger.getInstance().log("Grafico criado: " + nomeArquivo);
			} catch (NullPointerException e) {
				
			}
		}
	}

}
